package org.jftclient.tree;
import java.io.File;
import java.util.Collections;
import org.jftclient.config.dao.ConfigDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.TreeItem;
/**
* @author sergei.malafeev
*/
@Component
public class LocalTree implements Tree {
@Autowired
private ConfigDao configDao;
public TreeItem<Node> createRootNode() {
Node node = new Node();
node.setName("/");
node.setFile(false);
node.setPath("/");
node.setLocal(true);
return createNode(node);
}
@Override
public boolean isLocal() {
return true;
}
@Override
public TreeItem<Node> createNode(Node node) {
return new TreeItem<Node>(node) {
private boolean isFirstTimeChildren = true;
@Override
public ObservableList<TreeItem<Node>> getChildren() {
if (isFirstTimeChildren) {
isFirstTimeChildren = false;
super.getChildren().setAll(buildChildren(this));
}
return super.getChildren();
}
@Override
public boolean isLeaf() {
return getValue().isFile();
}
};
}
@Override
public ObservableList<TreeItem<Node>> buildChildren(TreeItem<Node> treeItem) {
Node f = treeItem.getValue();
if (f != null && !f.isFile()) {
File[] files = new File(f.getPath()).listFiles();
if (files != null) {
ObservableList<TreeItem<Node>> children = FXCollections.observableArrayList();
for (File childFile : files) {
if (!configDao.get().isShowHiddenFiles() && childFile.isHidden()) {
continue;
}
children.add(createNode(new Node(childFile)));
}
Collections.sort(children, (o1, o2) -> o1.getValue().compareTo(o2.getValue()));
return children;
}
}
return FXCollections.emptyObservableList();
}
}